============================================================== Guild: wafer.space Community Channel: ℹ️ - Information / ⁉️-questions / Tons of DRC issues After: 2026-03-31 11:59 p.m. Before: 2026-05-01 12:00 a.m. ============================================================== [2026-04-26 11:17 p.m.] thecomputerguy While working on https://github.com/MidstallSoftware/aegis/pull/21, I've seen all of these DRC issues and I am stuck: ``` 26-Apr-2026 21:54:06 | ERROR | Violated rules are : {'M1.2b', 'V2.2a', 'M2.1', 'M4.2a', 'M1.2a', 'V1.1', 'M1.1', 'M3.2a', 'V2.1', 'M2.2a', 'M3.1', 'V1.3c', 'V1.2a'} ``` I'm not sure what I am doing wrong but it would be nice to have some help. I've been running my DRC via `nix build .#checks.aarch64-linux.luna-1-gds-verify` and producing the GDS via `nix build .#luna-1-tapeout`. [2026-04-27 1:24 a.m.] namibj Try opening the gds in KLayout; `KLAYOUT_PATH=$PDK_ROOT/$PDK/libs.tech/klayout klayout`, then just open the file via the menu; you can then trigger the DRC by clicking run full drc in {Attachments} 2026-04_media/image-B2F54.png [2026-04-27 1:24 a.m.] namibj you might have to hit the rightmost one of these that says sky130a for me here (the drop-down button on the right edge of it) and select the option that isn't just "default". {Attachments} 2026-04_media/image-01F21.png [2026-04-27 1:25 a.m.] namibj then maybe press that full Torx-shaped button with the T in the shape once after seelcting, before the DRC option in the main menu bar becomes available. [2026-04-27 1:26 a.m.] namibj You can then press on any individual line of the report and the offending segments show up in the layout view window as black lines; you can adjust colors and such on the right side of the report window. [2026-04-27 2:48 a.m.] thecomputerguy Huh? What would that do? [2026-04-27 2:49 a.m.] thecomputerguy Shouldn't I have this information in the log I got from KLayout running through the GDS? [2026-04-27 2:59 a.m.] namibj Oh yeah if you have the log file you should be able to open it and view, like this: {Attachments} 2026-04_media/image-DE59E.png [2026-04-27 3:00 a.m.] thecomputerguy Huh? [2026-04-27 3:00 a.m.] namibj run DRC (custom), unselect all (make sure you're not gonna overwrite your nice log), top right file -> open, select the log, enjoy. [2026-04-27 3:01 a.m.] namibj I'm assuming you don't want to search for the offending coordinates/shapes in the text files by hand, to try and make sense of what exactly the DRC log entries are blaming/complaining about. [2026-04-27 3:01 a.m.] thecomputerguy Do I have to use the GUI for this? [2026-04-27 3:03 a.m.] namibj The DRC complaints only narrow down to which cell, and I'm not sure if they blame specific instances of a cell or only "all". [2026-04-27 3:08 a.m.] namibj The engine itself only really operates on (polygonal, for efficciency, but it might as well be literal as the outcome wouldn't change, just the runtime/memory usage) rasterized/bitmap-view of the GDS layers at the native coordinate quantization "pixel size", as the rules rely heavily on performing boolean operations between/across layers to determine things. It unfortunately doesn't know what source shape caused the problem, only what edge/edge-pair (as in, location) caused the problem. If there are edges at that location from more than one layer you have to guess based on the rule's description which of the options it was. [2026-04-27 3:08 a.m.] namibj Technically you can reason about the files without the GUI. Have you found the file yet? [2026-04-27 3:11 a.m.] thecomputerguy I think so [2026-04-27 3:11 a.m.] thecomputerguy ``` result-4/netlist.spice result-4/v2spice.log result-4/raw_netlist.spice result-4/drc_output/contact.drc result-4/drc_output/metal1.drc result-4/drc_output/luna_1_metal4.lyrdb result-4/drc_output/luna_1_via4.lyrdb result-4/drc_output/metaltop.drc result-4/drc_output/via1.drc result-4/drc_output/layers_def.drc result-4/drc_output/drc_run_2026_04_26_21_21_23.log result-4/drc_output/luna_1_geom.lyrdb result-4/drc_output/luna_1_metal5.lyrdb result-4/drc_output/luna_1_via2.lyrdb result-4/drc_output/luna_1_metal2.lyrdb result-4/drc_output/metal5.drc result-4/drc_output/metal2.drc result-4/drc_output/luna_1_metal3.lyrdb result-4/drc_output/luna_1_via3.lyrdb result-4/drc_output/via2.drc result-4/drc_output/luna_1_contact.lyrdb result-4/drc_output/geom.drc result-4/drc_output/via4.drc result-4/drc_output/luna_1_via1.lyrdb result-4/drc_output/luna_1_metal1.lyrdb result-4/drc_output/via3.drc result-4/drc_output/luna_1_metaltop.lyrdb result-4/drc_output/metal3.drc result-4/drc_output/metal4.drc result-4/drc.log result-4/gds_check.log ``` I think it might be one of the `.drc` files? [2026-04-27 3:12 a.m.] namibj given it's named "output", I'd presume so. [2026-04-27 3:12 a.m.] namibj can you show the first few hundred bytes or so of one of them, I'd start with the `rc_run_2026_04_26_21_21_23.log`? [2026-04-27 3:13 a.m.] thecomputerguy That file is quite small [2026-04-27 3:13 a.m.] thecomputerguy {Attachments} 2026-04_media/message-D9C0B.txt [2026-04-27 3:14 a.m.] namibj This is one of the drc result formats that I've encountered; I'm not sure if this is the one you'd have. {Attachments} 2026-04_media/sky130_drc-516D3.txt [2026-04-27 3:14 a.m.] thecomputerguy Oh, that's the `.lyrdb` files I have [2026-04-27 3:14 a.m.] namibj yeah I know it's not the same PDK [2026-04-27 3:15 a.m.] thecomputerguy Yeah [2026-04-27 3:15 a.m.] thecomputerguy Though I plan on using Sky130 in the future heh [2026-04-27 3:16 a.m.] thecomputerguy There's a lot of V1.1 violations for Via1 [2026-04-27 3:16 a.m.] thecomputerguy > V1.1 : Min/max Via1 size . : 0.26µm [2026-04-27 3:17 a.m.] namibj this XML refers to the generator. This XML itself is a clean DRC result. You should see content in the XML if you have that format. I'd try grepping for a fragment of the XML that you'd expect to show up, like maybe the lydrc file as a string. [2026-04-27 3:17 a.m.] thecomputerguy Huh the `.drc` files I have are python [2026-04-27 3:19 a.m.] namibj if you violate that you're somehow creating vias that are not the size they should be, like, there's no room for options there, vias have exactly that size, and thus it's either some generator script thinking it knows better (unlikely unless you wrote something like that for this AegisFPGA), or somewhere a misconfig about coordinate system scaling. [2026-04-27 3:20 a.m.] thecomputerguy Shouldn't OpenROAD have done that automatically in the way the PDK wanted? [2026-04-27 3:20 a.m.] namibj See if you find `` at the end of any of those files [2026-04-27 3:20 a.m.] namibj sure, should, but vias don't tend to just malform themselves. [2026-04-27 3:21 a.m.] thecomputerguy ``` $ grep -r "" result-4/drc_output result-4/drc_output/luna_1_metal4.lyrdb: result-4/drc_output/luna_1_via4.lyrdb: result-4/drc_output/luna_1_geom.lyrdb: result-4/drc_output/luna_1_metal5.lyrdb: result-4/drc_output/luna_1_via2.lyrdb: result-4/drc_output/luna_1_metal2.lyrdb: result-4/drc_output/luna_1_metal3.lyrdb: result-4/drc_output/luna_1_via3.lyrdb: result-4/drc_output/luna_1_contact.lyrdb: result-4/drc_output/luna_1_via1.lyrdb: result-4/drc_output/luna_1_metal1.lyrdb: result-4/drc_output/luna_1_metaltop.lyrdb: ``` [2026-04-27 3:21 a.m.] namibj great, so that's probably the files of interest. [2026-04-27 3:21 a.m.] namibj `result-4/drc_output/luna_1_via1.lyrdb`? [2026-04-27 3:21 a.m.] namibj If it's not secret ofc [2026-04-27 3:22 a.m.] thecomputerguy Oh, that's 56kb [2026-04-27 3:23 a.m.] namibj yeah a bunch of your errors [2026-04-27 3:23 a.m.] thecomputerguy ``` V1.1 V1.1 : Min/max Via1 size . : 0.26µm V1.2a V1.2a : min. via1 spacing : 0.26µm V1.2b V1.2b : Via1 Space in 4x4 or larger via1 array : 0.36µm V1.3a V1.3a : metal1 overlap of via1 >= 0.0 V1.3c V1.3c : metal1 (< 0.34um) end-of-line overlap. (Applies to all < 0.34µm wide Metal lines, excluding Metal branches shorter than 0.28µm.) : 0.06µm V1.3d V1.3d : If metal1 overlap via1 by < 0.04um on one side, adjacent metal1 edges overlap. : 0.06µm V1.4a V1.4a : metal2 overlap of via1 >= 0.01 um V1.4b V1.4p : metal2 (< 0.34um) end-of-line overlap. (Applies to all < 0.34µm wide Metal lines, excluding Metal branches shorter than 0.28µm.) : 0.06µm V1.4c V1.4c : If metal2 overlap via1 by < 0.04um on one side, adjacent metal2 edges overlap. : 0.06µm ``` [2026-04-27 3:23 a.m.] namibj if you open the GDS you can just load it or you can look at it's contents more programmatically [2026-04-27 3:23 a.m.] namibj yeah that's just the header/legend 😄 [2026-04-27 3:23 a.m.] thecomputerguy I have the GDS open on my laptop in KLayout [2026-04-27 3:24 a.m.] namibj you can feed this file in then [2026-04-27 3:24 a.m.] thecomputerguy How do I open the lyrdb file? [2026-04-27 3:24 a.m.] namibj can you show me the menu bar? Or rather, what's teh right most main menu bar name? [2026-04-27 3:25 a.m.] thecomputerguy {Attachments} 2026-04_media/image-77582.png [2026-04-27 3:25 a.m.] namibj actually, try "Tools -> Marker Browser" [2026-04-27 3:25 a.m.] thecomputerguy Ah cool, that looks promising [2026-04-27 3:26 a.m.] namibj you might want to point klayout at the PDK path though [2026-04-27 3:26 a.m.] namibj e.g. `KLAYOUT_PATH=$PDK_ROOT/$PDK/libs.tech/klayout klayout -e` [2026-04-27 3:26 a.m.] namibj (if using ciel) [2026-04-27 3:26 a.m.] thecomputerguy {Attachments} 2026-04_media/image-07C4A.png [2026-04-27 3:27 a.m.] namibj yeah you select a row possibly after expanding a folded one, and while a row is selected/highlighted, you'll see them highlighted as lines in the layout view window [2026-04-27 3:28 a.m.] namibj (SerDes? Noice....) [2026-04-27 3:28 a.m.] thecomputerguy Cool, I see it {Attachments} 2026-04_media/image-EF9A9.png [2026-04-27 3:29 a.m.] thecomputerguy https://github.com/Midstall/aegis/pull/21/changes#diff-297415984077469f4bd6bc71cb8e9dc8615316b804cca6335ca1b89eecaaccf1 I'll have to change something here I think to fix it {Embed} https://github.com/Midstall/aegis/pull/21/changes fix: verification by RossComputerGuy · Pull Request #21 · Midstal... 2026-04_media/19699320-8166B [2026-04-27 3:30 a.m.] thecomputerguy I'm not exactly sure what I need to do to fix this [2026-04-27 3:38 a.m.] thecomputerguy Ah, OpenROAD stopped short on iterating. I wonder if increasing the routing iterations would fix a lot of problems. [2026-04-27 3:44 a.m.] namibj auto routing "gave up" before finishing into a state where it passed LVS to the point where it at least thinks it has finished routing the entire netlist it was tasked with? [2026-04-27 3:45 a.m.] thecomputerguy Idk, I've tried doing LVS but I skipped LVS because it caused the DRC + LVS job to run for like 30 hours [2026-04-27 3:46 a.m.] namibj LVS comes after DRC (personally; this is not inherently strict but some DRC fails will result in bogus LVS) [2026-04-27 3:47 a.m.] namibj note you probably want to exempt "casual" LVS from operating at granularity below the standard cell "abstract block with ports and nominal behavior/named-behavior", at least in usual design loop. [2026-04-27 3:48 a.m.] thecomputerguy Oh [2026-04-27 3:49 a.m.] namibj no sadly don't know how [2026-04-27 3:50 a.m.] thecomputerguy This is my first design so idk how either lol [2026-04-27 3:50 a.m.] namibj I'd suggest you tell openroad to not give up so soon; it might have been tuned for tiles that are substantially less packed vs. your FPGA. [2026-04-27 3:50 a.m.] thecomputerguy Yeah [2026-04-27 3:51 a.m.] namibj Like I read mention of that yesterday but don't even remember for which tool let alone in what docs. [2026-04-27 3:51 a.m.] namibj (And I don't need to for my tiny 1x2 analog tile on ttsky26a.) [2026-04-27 3:53 a.m.] namibj (....can you link the actual analog PLL that is mentioned by the code in your repo? I'd like to look at it this evening a little bit for some dose of inspiration.) [2026-04-27 3:56 a.m.] thecomputerguy https://github.com/Midstall/aegis/blob/f375157ff1c4b5b1cfcac49411b3b2164238857a/ip/lib/src/components/analog/pll.dart {Embed} https://github.com/Midstall/aegis/blob/f375157ff1c4b5b1cfcac49411b3b2164238857a/ip/lib/src/components/analog/pll.dart aegis/ip/lib/src/components/analog/pll.dart at f375157ff1c4b5b1cfca... Open source FPGA silicon. Contribute to Midstall/aegis development by creating an account on GitHub. 2026-04_media/aegis-91DBA [2026-04-27 4:06 a.m.] namibj No I found that. But that's not doing PLL. It's _wrapping,_ sure, but it's not _doing_ PLL. [2026-04-27 4:07 a.m.] thecomputerguy :SubaThink: [2026-04-27 4:10 a.m.] namibj PLL is some sort of oscillating thingy that can be somehow controlled, and is somehow phase-compared to some kind of reference, and what makes it PLL is that these two things (the "controllable oscillator" and the "oscillator [output] phase comparing to reference") are wired into a control _loop._ [2026-04-27 4:11 a.m.] namibj If correctly designed/configured, it then has to actually manage to _lock_ to deserve the title of "Phase-**Locked** Loop". [2026-04-27 4:11 a.m.] namibj (I don't want to keep you from finishing the FPGA into a functional state in time for the WS Run2 deadline.) [2026-04-27 4:17 a.m.] thecomputerguy Yeah, I'm just wrapping the one from the PDK for simplicity [2026-04-27 4:26 a.m.] namibj ....there is one in the PDK? (I tried and failed to find one, but maybe I searched wrong) [2026-04-27 4:28 a.m.] thecomputerguy `gf180mcu_fd_pr__pll.sym` lol [2026-04-27 4:29 a.m.] namibj ....that's a symbol, not an actual thing. It's just an abstract placeholder for a schematic. [2026-04-27 4:31 a.m.] thecomputerguy Oh [2026-04-27 5:07 a.m.] mithro_ @Leo Moser (mole99) - Dunno if you have any ideas about this? [2026-04-27 6:23 a.m.] mole99 The vias are indeed of a fixed size, so the only issues I can think of are that the manufacuring grid is not set correctly (everything is scaled by a factor of 5), or there is some other setup issue. I suggest checking the wafers.space [gf180mcu-project-template](https://github.com/wafer-space/gf180mcu-project-template) against your custom set up. [2026-04-27 5:18 p.m.] thecomputerguy I've been checking what I have vs the template. I might've forgotten about PDN lol [2026-04-29 3:31 p.m.] thecomputerguy Hmm, 0 violations in OpenROAD's DRC but KLayout says like 3.5k [2026-04-29 3:40 p.m.] thecomputerguy @Tim 'mithro' Ansell which DRC is more believable? [2026-04-29 3:45 p.m.] mole99 You need to pass KLayout DRC in order to tape out. OpenROAD only has an abstract view of the cells and routing. [2026-04-29 3:47 p.m.] thecomputerguy Oh. Most of my KLayout DRC violations are on metal1, 2.2k. [2026-04-29 4:04 p.m.] thecomputerguy I don't think I'll be able to get the early bird deadline. Everything I try to do does not fix the DRC violations. I'm not sure what I am doing wrong and idk how to fix the violations. [2026-04-29 6:44 p.m.] mole99 You should be able to buy a slot even if you don't have the design ready yet. [2026-04-29 6:44 p.m.] mole99 As for the DRC violations, if you could share your current layout, I can take a quick look to see what's going on. [2026-04-29 7:16 p.m.] thecomputerguy Like the GDS file? [2026-04-29 7:16 p.m.] thecomputerguy Cool, hopefully I can do that soon. [2026-04-29 7:32 p.m.] mole99 Yes [2026-04-29 7:46 p.m.] thecomputerguy Cool, here you go {Attachments} https://media.githubusercontent.com/media/wafer-space/discord.wafer.space/master/large_media/wafer-space/%E2%84%B9%EF%B8%8F%20-%20Information/%E2%81%89%EF%B8%8F-questions/tons-of-drc-issues/2026-04/2026-04_media/luna_1-16CF7.gds [2026-04-29 10:04 p.m.] bailey8889 It looks to me like all the metal layers have been removed from the standard cells and merged at the top level. This appears to be result in power shorts and very thin metal1 maybe due to resizing. See screenshot. I don't think that this will be easy to extract with open source tools. {Attachments} 2026-04_media/2026-04-30_6.58.18-C280A.png [2026-04-29 10:16 p.m.] thecomputerguy Fun, lemme try something [2026-04-29 10:17 p.m.] thecomputerguy Gonna drop the `pkgs/aegis-tapeout/scripts/drc_repair.py` script [2026-04-30 2:56 a.m.] thecomputerguy I have this now btw {Attachments} https://media.githubusercontent.com/media/wafer-space/discord.wafer.space/master/large_media/wafer-space/%E2%84%B9%EF%B8%8F%20-%20Information/%E2%81%89%EF%B8%8F-questions/tons-of-drc-issues/2026-04/2026-04_media/luna_1-CC0DB.gds [2026-04-30 4:11 a.m.] bailey8889 Looks like the standard cell rows are missing filler cells. Can you confirm? [2026-04-30 4:12 a.m.] thecomputerguy I think I see standard cells, what exactly are standard cell rows? [2026-04-30 4:14 a.m.] thecomputerguy Ah, sounds like I need to run `filler_placement`? {Reactions} 👍 [2026-04-30 4:28 a.m.] thecomputerguy Cool, I've added that in {Attachments} https://media.githubusercontent.com/media/wafer-space/discord.wafer.space/master/large_media/wafer-space/%E2%84%B9%EF%B8%8F%20-%20Information/%E2%81%89%EF%B8%8F-questions/tons-of-drc-issues/2026-04/2026-04_media/luna_1-EDAF4.gds [2026-04-30 4:28 a.m.] thecomputerguy KLayout is getting a little slow [2026-04-30 4:33 a.m.] bailey8889 Better, but still not seeing power grid connections to all the macros or cell rows. [2026-04-30 4:34 a.m.] thecomputerguy Weird, I did do the PDN stuff [2026-04-30 4:34 a.m.] bailey8889 Are you using librelane or OpenROAD directly? [2026-04-30 4:35 a.m.] thecomputerguy OpenROAD directly and orchestrated through Nix. [2026-04-30 4:35 a.m.] thecomputerguy The OpenROAD scripts are generated from Dart. [2026-04-30 4:35 a.m.] thecomputerguy Do I need to do `define_pdn_grid`? [2026-04-30 4:52 a.m.] thecomputerguy ``` aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_325 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_326 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_327 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_328 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_329 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_33 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_330 aegis-top-pnr-luna_> [INFO PDN-0001] Inserting grid: macro_grid - io_fabric/lut_fabric/tile_331 ``` This seems promising [2026-04-30 4:59 a.m.] bailey8889 TBH, what you're are attempting is beyond my level of experience. What I've seen in the past, is that hard macros have their own power grid with the top metal layer one lower than the max. (metal4 in this case). Since metal 4 is a vertical layer, you should be able to have the power grid for the macros, connect directly to metal1 through a metal1-via-metal2-via2-metal3-via3-metal4 stack at the metal1 power rail for each cell row. How many metal4 power rails you use depends on the width of the macro. Since you need metal4 routing over the macros, you'll want to be careful where you place the power rails. Some of the macros currently have metal5, and while that may be doable, I suggest the top metal routing layer be limited to metal4. Next you need to design your top level power gird so that both power and ground horizontal metal5 power lines intersect with all the hard macros. The top power grid will be vertical metal4 and horizontal metal5. In this case, metal4 power rails are not generally routed over macros that already have metal4 power rails. Another consideration is the power connections for the standard cell rows placed between the macros. Normally, the metal1 power rails in these standard cells is connected to metal4 power rails at the top level, but in your case, these rows are narrow and may not intersect with the power grid. You may want to consider setting these regions as no cell placement. Also noticed that you are using fill cells and not fillcap cells. fillcap cells add capacitance between the power and ground lines for better stability. [2026-04-30 4:59 a.m.] thecomputerguy Alright. Thank you for the help though. {Reactions} 👍 [2026-04-30 7:14 a.m.] mole99 I can only repeat what bailey said. The power connections are missing, and decap cells would be better than fillcaps. [2026-04-30 7:14 a.m.] mole99 Independent of that, your layout is missing a padring and a sealring. This is your interface to the outside world. [2026-04-30 7:14 a.m.] mole99 {Attachments} 2026-04_media/Bildschirmfoto_vom_2026-04-30_09-10-29-2847F.png [2026-04-30 7:14 a.m.] mole99 Here is your layout alongside the gf180mcu project template. [2026-04-30 7:15 a.m.] mole99 I would recommend implementing the gf180mcu project template and comparing the output with your setup. [2026-04-30 6:54 p.m.] thecomputerguy Cool, will see what that can do for me. Thanks. I'm not really familiar with LibreLane or any of this stuff so this has been quite new for me. Hopefully I can integrate some of this trial and error into my asix and harbor repos which help out for ASIC/FPGA design/dev. {Reactions} 👍 ============================================================== Exported 121 message(s) ==============================================================